package com.second.app.thread.线程基础.day04.dirtyread;

/**
 * @Author GYZ
 * @Date 2023/11/22
 * <pre>
 *   此案例：主要是为了复现一个脏读的现象，两个场景，一个设置值，一个获取值
 *          设置值是同步方法，但是获取值是异步的，所以就会存在脏读的现象。读取实例变量时，
 *          此时值已经被其他线程更改过了。
 *   解决方案：PublicVariable类中获取值的方法也加上synchronized，就不会出现脏读。
 * </pre>
 */
public class Main {
    public static void main(String[] args) {
        class ThreadP extends Thread{
            private PublicVariable publicVariable;
            public ThreadP(PublicVariable publicVariable){
                 this.publicVariable =publicVariable;
            }
            @Override
            public void run() {
                publicVariable.setValue("B","BB");
            }
        }
        try {
            PublicVariable publicVariable = new PublicVariable();
            ThreadP threadP = new ThreadP(publicVariable);
            threadP.start();
            Thread.sleep(200);
            publicVariable.getValue();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
